package com.hongyi.util;

/**
 * @Author: hongyi
 * @CreateTime: 2024-10-18
 */

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class ExcelUtils {

    /**
     * 读取 Excel 文件
     *
     * @param file       要读取的 Excel 文件
     * @param sheetIndex 要读取的工作表索引
     * @return 读取到的数据
     */
    public static List<List<String>> readExcel(File file, int sheetIndex) {
        List<List<String>> data = new ArrayList<>(); // 存储读取到的数据

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // 定义日期格式
        try (FileInputStream fis = new FileInputStream(file);
             Workbook workbook = new XSSFWorkbook(fis)) {

            // 获取指定 Sheet
            Sheet sheet = workbook.getSheetAt(sheetIndex);

            // 遍历每一行
            for (Row row : sheet) {
                List<String> rowData = new ArrayList<>(); // 存储每一行的数据
                // 遍历每一列
                for (Cell cell : row) {
                    switch (cell.getCellType()) { // 根据单元格类型获取相应的值
                        case STRING: // 字符串类型
                            rowData.add(cell.getStringCellValue());
                            break;
                        case NUMERIC: // 数字类型
                            // 检查是否为日期类型
                            if (DateUtil.isCellDateFormatted(cell)) {
                                // 转换为日期字符串
                                Date date = cell.getDateCellValue();
                                rowData.add(dateFormat.format(date));
                                // rowData.add(cell.getDateCellValue().toString());
                            } else if (cell.getNumericCellValue() == Math.floor(cell.getNumericCellValue())) {
                                // 整数类型
                                rowData.add(String.valueOf((int) cell.getNumericCellValue()));
                            } else {
                                // 浮点数类型
                                rowData.add(String.valueOf(cell.getNumericCellValue()));
                            }
                            break;
                        case BOOLEAN: // 布尔类型
                            rowData.add(String.valueOf(cell.getBooleanCellValue()));
                            break;
                        case FORMULA: // 公式类型
                            rowData.add(cell.getCellFormula());
                            break;
                        default: // 其他类型
                            rowData.add("");
                    }
                }
                data.add(rowData);
            }
        } catch (IOException e) {
            System.err.println("读取 Excel 文件时发生错误: " + e.getMessage());
            e.printStackTrace();
        }

        return data;
    }

}
